package edu.cibertec.dao;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import edu.cibertec.bean.ExpedienteActividadDTO;
import edu.cibertec.bean.ExpedienteDTO;
import edu.cibertec.interface1.ExpedienteActividadDAO;

public class MysqlExpedienteActividadDAO implements ExpedienteActividadDAO {
	// carga el archivo xml
	SqlSessionFactory sqlMapper = null;// obtiene la configuracion del archivo
	{
		String archivo = "ConfiguracionIbatis.xml";// abrea la configuracion
		try {
			Reader reader = Resources.getResourceAsReader(archivo);
			sqlMapper = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	
//  INICIO METODOS USADOS PARA EL ACTUALIZAR EXPEDIENTE ACTIVIDAD
	@Override
	public ArrayList<ExpedienteActividadDTO> buscarExpedienteActividad(
			ExpedienteActividadDTO x) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ExpedienteActividadDTO obtenerExpedienteActividad(
			ExpedienteActividadDTO x) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	
	@SuppressWarnings("unchecked")
	@Override
	public List<ExpedienteDTO> listaExpedientexUsuarioResponsable(int idusuario) {

		List<ExpedienteDTO> lstExpediente = null;
		SqlSession sesion = sqlMapper.openSession();

		try {

			lstExpediente = sesion.selectList(
					"consultaExpedienteXML.sqlListarxIdUsuarioResponsable",
					idusuario);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			sesion.close();
		}

		return lstExpediente;

	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<ExpedienteActividadDTO> listaActividadesXexpediente(int idExpediente) {
		
		List<ExpedienteActividadDTO> lstActividadesXexpediente = null;
		SqlSession sesion = sqlMapper.openSession();
		
		try {
			
			lstActividadesXexpediente = sesion.selectList("ExpedienteActividadXML.sqlObtenerActividadesxExpediente",idExpediente);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			sesion.close();
		}
		
		return lstActividadesXexpediente;
	}


//  FIN DE LOS METODOS USADOS PARA EL ACTUALIZAT EXPEDIENTE ACTIVIDAD	
	
	
	@SuppressWarnings("unchecked")
	@Override
	public ArrayList<ExpedienteActividadDTO> listaExpedienteActividad(
			ExpedienteActividadDTO x) throws Exception {
		// TODO Auto-generated method stub

		ArrayList<ExpedienteActividadDTO> data = new ArrayList<ExpedienteActividadDTO>();
		SqlSession sesion = sqlMapper.openSession();
		try {
			System.out.println("getIdexpediente:" + x.getIdexpediente());
			data = (ArrayList<ExpedienteActividadDTO>) sesion.selectList(
					"ExpedienteActividadXML.sqlListar", x);
			// System.out.println("data:"+data.get(0).getIdexpedienteactividad());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			sesion.close();
		}
		return data;
	}

	@Override
	public int registrarExpedienteActividad(ExpedienteActividadDTO x) {
		SqlSession sesion = sqlMapper.openSession();
		int estado = 0;
		try {
			estado = sesion.insert("ExpedienteActividadXML.sqlRegistrar", x);
			sesion.commit();
		} catch (Exception e) {
			e.printStackTrace();
			sesion.rollback();
		} finally {
			sesion.close();
		}
		return estado;
	}

	@Override
	public int eliminarExpedienteActividad(ExpedienteActividadDTO x)
			throws Exception {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int actualizarExpedienteActividad(ExpedienteActividadDTO x)
			throws Exception {
		// TODO Auto-generated method stub
		SqlSession sesion = sqlMapper.openSession();
		int estado = 0;
		try {
			estado = sesion.update("ExpedienteActividadXML.sqlUpdate", x);
			sesion.commit();
		} catch (Exception e) {
			e.printStackTrace();
			sesion.rollback();
		} finally {
			sesion.close();
		}
		return estado;
	}

	public static void main(String[] args) {
		
		MysqlExpedienteActividadDAO a = new MysqlExpedienteActividadDAO();
		System.out.println(a.listaExpedientexUsuarioResponsable(5).size());
		System.out.println(a.listaActividadesXexpediente(3));
		
	}

	
	
}
